package com.william.jdbcplus.core.util;

import com.alibaba.fastjson.JSONArray;
import com.william.jdbcplus.common.page.IPage;
import com.william.jdbcplus.core.jdbc.impl.BaseJdbc;

import javax.sql.DataSource;
import java.util.List;
import java.util.Map;

public class JdbcDaoUtil {

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回JSON数组
     */
    public static JSONArray queryToJsonArray(String sql, DataSource ds) {
        JSONArray jsonArray = BaseJdbc.getInstance().queryToJsonArray(sql, ds);
        return jsonArray;
    }

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回LIST
     */
    public static List<Map<String, Object>> queryToMapList(String sql, DataSource ds) {
        List<Map<String, Object>> result = BaseJdbc.getInstance().queryToMapList(sql, ds);
        return result;
    }

    /**
     * 查询map分页
     *
     * @param page
     * @param sql
     * @param ds
     * @return
     */
    public static IPage<Map<String, Object>> queryMapPage(IPage<?> page, String sql, DataSource ds) {
        return BaseJdbc.getInstance().queryMapPage(page, sql, ds);
    }

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回MAP
     */
    public static Map<String, Object> queryToMap(String sql, DataSource ds) {
        Map<String, Object> result = BaseJdbc.getInstance().queryToMap(sql, ds);
        return result;
    }

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回MAP
     */
    public static <T> T queryEntity(String sql, DataSource ds, Class<T> clazz) {
        T entity = BaseJdbc.getInstance().queryEntity(sql, ds, clazz);
        return entity;
    }

    /**
     * 查询数据库
     *
     * @param sql 查询脚本
     * @return 返回MAP
     */
    public static <T> List<T> queryEntityList(String sql, DataSource ds, Class<T> clazz) {
        List<T> list = BaseJdbc.getInstance().queryEntityList(sql, ds, clazz);
        return list;
    }

    /**
     * 查询实体分页
     *
     * @param page
     * @param sql
     * @param ds
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> IPage<T> queryEntityPage(IPage<?> page, String sql, DataSource ds, Class<T> clazz) {
        return BaseJdbc.getInstance().queryEntityPage(page, sql, ds, clazz);
    }

    /**
     * 查询个数
     *
     * @param sql
     * @param ds
     * @return
     */
    public static Integer queryCount(String sql, DataSource ds) {
        Integer count = BaseJdbc.getInstance().queryCount(sql, ds);
        return count;
    }


    /**
     * 执行脚本，会修改数据库
     *
     * @param sql
     * @return 返回影响行数
     */
    public static int exec(String sql, DataSource ds) {
        int result = BaseJdbc.getInstance().exec(sql, ds);
        return result;
    }

    /**
     * 执行脚本，会修改数据库
     *
     * @param sqlList
     * @return 返回影响行数
     */
    public static boolean execBatch(List<String> sqlList, DataSource ds) {
        boolean result = BaseJdbc.getInstance().execBatch(sqlList, ds);
        return result;
    }

}